package be.vdab.servlets;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import be.vdab.entities.Artikel;
import be.vdab.entities.Artikelgroep;
import be.vdab.entities.FoodArtikel;
import be.vdab.entities.NonFoodArtikel;
import be.vdab.services.ArtikelService;

@WebServlet("/artikels/toevoegen.htm")
public class ArtikelToevoegenServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private static final String VIEW = "/WEB-INF/JSP/artikels/toevoegen.jsp";
	private static final String REDIRECT_URL = "/artikels/toegevoegd.htm";
	private final ArtikelService artikelService = new ArtikelService();
	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException{
		request.getRequestDispatcher(VIEW).forward(request, response);
	}
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException{
		List<String> fouten = new ArrayList<String>();
		int houdbaarheid = 0;
		int garantie = 0;
		String naam = request.getParameter("naam");
		if(naam == null || naam.isEmpty()){
			fouten.add("Naam verplicht");
		}
		BigDecimal aankoopprijs = null;
		BigDecimal verkoopprijs = null;
		try{
			aankoopprijs = new BigDecimal(request.getParameter("aankoopprijs"));
			if(aankoopprijs.compareTo(BigDecimal.ZERO) < 0){
				fouten.add("aankoopprijs moet positief zijn");
			}
		}
		catch(NumberFormatException ex){
			fouten.add("Geef een getal bij aankoopprijs");
		}
		try{
			verkoopprijs = new BigDecimal(request.getParameter("verkoopprijs"));
			if(verkoopprijs.compareTo(BigDecimal.ZERO) < 0){
				fouten.add("verkoopprijs moet positief zijn");
			}
		}
		catch(NumberFormatException ex){
			fouten.add("Geef een getal bij verkoopprijs");
		}
		String soort = request.getParameter("soort");
		if("F".equals(soort)){
			try{
				houdbaarheid = Integer.parseInt(request.getParameter("houdbaarheid"));
				if(houdbaarheid <= 0){
					fouten.add("Geef positief getal voor houdbaarheid");
				}
			}
			catch(NumberFormatException ex){
				fouten.add("geef een getal in bij houdbaarheid");
			}
		} else if ("NF".equals(soort)){
			try{
				garantie = Integer.parseInt(request.getParameter("garantie"));
				if(garantie <= 0){
					fouten.add("Geef positief getal voor garantie");
				}
			}
			catch(NumberFormatException ex){
				fouten.add("geef een getal in bij garantie");
			}
		} else {
			fouten.add("kies food of non-food");
		}
		Artikelgroep artikelgroep = null;
		try{
			artikelgroep = new Artikelgroep(request.getParameter("artikelgroep"));
		}
		catch (IllegalArgumentException ex){
			fouten.add("fout artikelgroep");
		}
		if(fouten.isEmpty()){
			Artikel artikel;
			if("F".equals(soort)){
				artikel = new FoodArtikel(naam, aankoopprijs, verkoopprijs, houdbaarheid, artikelgroep);
			} else {
				artikel = new NonFoodArtikel(naam, aankoopprijs, verkoopprijs, garantie, artikelgroep);
			}
			artikelService.create(artikel);
			response.sendRedirect(response.encodeRedirectURL(request.getContextPath() 
					+ REDIRECT_URL + "?artikelNr=" + artikel.getArtikelNr()));
		}
		else{
			request.setAttribute("fouten", fouten);
			request.getRequestDispatcher(VIEW).forward(request, response);
		}
	}
}
